import numpy as np
import pandas as pd
import pandas_profiling as pp
import altair as alt
from altair import Chart, X, Y, Axis, SortField
from vega_datasets import data
from altair import expr, datum
from altair.expr import datum
# for the notebook only (not for JupyterLab) run this command once per session
alt.renderers.enable('notebook')
alt.data_transformers.enable('default', max_rows=None)
alt.data_transformers.enable('default', max_rows=None)
df_winter = pd.read_csv('winter.csv')
df_summer = pd.read_csv('summer.csv')
df_sumandwint = pd.read_csv('sumandwint.csv')
df_dictionary = pd.read_csv('dictionary.csv')
df_summer.head()
df_dictionary.head()
summer_with_country_winner = pd.merge(df_summer,
df_dictionary[['CountryName','Code','ContinentName']],
left_on='Country',
right_on='Code',
how='left')
summer_with_country_winner.drop(['Country'], axis=1)
summer_with_code = pd.merge(summer_with_country_winner,
df_dictionary[['City','Country', 'CapitalLatitude','CapitalLongitude','ContinentName']],
on='City',
how='left')
top_countries = summer_with_code['Country_x'].value_counts()[:25].index.tolist()
filtered_summer = summer_with_code[summer_with_code['Country_x'].isin(top_countries)].reset_index()
filtered_summer.head()
select_box = alt.binding_select(options=list(summer_with_code['Sport'].unique()))
selection_box = alt.selection_single(name='Select', fields=['Sport'], bind=select_box)
bar_chart = alt.Chart(filtered_summer).mark_bar(size=15).encode(
x=alt.X('count()', axis=alt.Axis(title='The number of medals')),
y=alt.Y('Country_x:N', sort=alt.EncodingSortField(field='Medal', order='descending', op='count'),
axis=Axis(title='Countries')),
color=alt.Color('Medal:N', scale=alt.Scale(range=["#ffd700", "#c0c0c0", "#cd7f32"]), sort=['Gold', 'Silver','Bronze']),
order=alt.Order('Medal', sort='descending'),
).add_selection(
selection_box,
).transform_filter(
selection_box
).configure_axis(
labelFont='Lato Regular', labelColor='#5d646f', labelFontSize=12,
titleFont='Lato Regular Italic', titleFontSize=14, grid=True, gridColor='#5d646f', gridDash=[0.5, 0.5, 0.5], gridOpacity=0.4
).properties(
width=700,
height=550, padding=30,
title = alt.TitleParams(text = 'Top countries in each sport', anchor='start',
font = 'Lato Bold', fontSize = 18, color = '#3E454F')
)
from IPython.display import HTML
display(HTML("""
<style>
.vega-embed{
position: relative;
}
.vega-bind {
position: relative;
top: -520px;
left: 780px;
display: inline;
}
select {
width: 100px;
}
.vega-bind-name{
padding-right: 5px;
}
</style>
"""))
display(bar_chart)